//package base.gateway;
//
//
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * @author yanyun zhu
// * @version 1.0
// * @date 2021/12/21 15:44
// *   伪代码
// */
//public class RequestHandler {
//        // ID生成器
//        @Inject
//        private IdGenerator idGenerator;
//        // 消息队列生产者
//        @Inject
//        private Producer producer;
//        // 保存秒杀结果的Map
//        @Inject
//        private Map<Long, Result> results;
//
//        // 保存mutex的Map
//        private Map<Long, Object> mutexes = new ConcurrentHashMap<>();
//        // 这个网关实例的ID
//        @Inject
//        private long myId;
//
//        @Inject
//        private long timeout;
//
//        // 在这里处理APP的秒杀请求
//        public Response onRequest(Request request) {
//            // 获取一个进程内唯一的UUID作为请求id
//            Long uuid = idGenerator.next();
//            try {
//
//                Message msg = composeMsg(request, uuid, myId);
//
//                // 生成一个mutex，用于等待和通知
//                Object mutex = new Object();
//                mutexes.put(uuid, mutex)
//
//                // 发消息
//                producer.send(msg);
//
//                // 等待后端处理
//                synchronized(mutex) {
//                    mutex.wait(timeout);
//                }
//
//                // 查询秒杀结果
//                Result result = results.remove(uuid);
//
//                // 检查秒杀结果并返回响应
//                if(null != result && result.success()){
//                    return Response.success();
//                }
//
//            } catch (Throwable ignored) {}
//            finally {
//                mutexes.remove(uuid);
//            }
//            // 返回秒杀失败
//            return Response.fail();
//        }
//
//        // 在这里处理后端服务返回的秒杀结果
//        public void onResult(Result result) {
//
//            Object mutex = mutexes.get(result.uuid());
//            if(null != mutex) { // 如果查询不到，说明已经超时了，丢弃result即可。
//                // 登记秒杀结果
//                results.put(result.uuid(), result);
//                // 唤醒处理APP请求的线程
//                synchronized(mutex) {
//                    mutex.notify();
//                }
//            }
//        }
//}
